package net.sf.l2j.gameserver.model.actor.instance;

import java.util.StringTokenizer;

import javolution.text.TextBuilder;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.datatables.ItemTable;
import net.sf.l2j.gameserver.datatables.PcColorTable;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUser;
import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
import net.sf.l2j.gameserver.templates.L2NpcTemplate;
import net.sf.l2j.util.PcAction;
import net.sf.l2j.util.ServiceLog;

public class L2ServicesManagerInstance extends L2NpcInstance 
{
	public L2ServicesManagerInstance(int objectId, L2NpcTemplate template) 
	{
		super(objectId, template);
	}

	public static void getInstance() 
	{
		int _npcId = Config.Service_Npc_Manager_Id;
		String title = "Service Manager";
		PcAction.spawnCustomNpc(_npcId, title);
	}

	@Override
	public String getHtmlPath(int npcId, int val) 
	{
		String pom = "";

		if (val == 0)
			pom = "" + npcId;
		else
			pom = npcId + "-" + val;

		return "data/html/mods/service/" + pom + ".htm";
	}

	@Override
	public void onSpawn() 
	{
		super.onSpawn();
	}

	@Override
	public void onBypassFeedback(L2PcInstance player, String command)
	{
		StringTokenizer st = new StringTokenizer(command, " ");
		String actualCommand = st.nextToken();

		if (actualCommand.equalsIgnoreCase("showServices")) 
		{
			showServicesWindow(player);
		} 
		else if (actualCommand.equalsIgnoreCase("premadd1"))
		{
			if (player.getInventory().getItemByItemId(Config.Service_Premium1_Item_Id) == null || player.getInventory().getItemByItemId(Config.Service_Premium1_Item_Id).getCount() < Config.Service_Premium1_Item_Count) 
			{
				player.sendMessage("- Не хватает монет");
				return;
			}
			try 
			{
				PcAction.addPremiumServices(1, player.getAccountName());
				player.destroyItemByItemId("Consume",Config.Service_Premium1_Item_Id,Config.Service_Premium1_Item_Count, player, false);
				MagicSkillUser MSU = new MagicSkillUser(player, player, 2023, 1, 1,0);
				player.sendPacket(MSU);
				player.broadcastPacket(MSU);
				player.sendMessage("- Вы получили премиум аккаунт на 1 месяц. Новое получение не добавляет время, а обновляет!");
				player.store();
			} 
			catch (StringIndexOutOfBoundsException e)
			{
				player.sendMessage("- Ошибка");
			}
		} 
		else if (actualCommand.equalsIgnoreCase("setCL6")) 
		{
			if (!player.isClanLeader())
			{
				player.sendMessage("- Вы не глава клана. Только глава клана может это сделать.");
				return;
			} 
			else if (player.getClan().getLevel() != 5) 
			{
				player.sendMessage("- Не подходящий уровень клана.Можно использовать только если уровень клана 5");
				return;
			} 
			else if (player.getInventory().getInventoryItemCount(Config.Service_CL6_Item_Id, 0) < Config.Service_CL6_Item_Count)
			{
				player.sendMessage("- У Вас не достаточное кол-во предметов для покупки уровня клана.");
				return;
			}
			L2ItemInstance destritem = player.getInventory().destroyItemByItemId("Setclanlvl 6 for " + player.getName(),Config.Service_CL6_Item_Id,Config.Service_CL6_Item_Count, player, player);
			if (destritem != null) 
			{
				player.getClan().changeLevel(6);
				player.sendMessage("- Вы успешно повысили уровень клана!");
				InventoryUpdate iu = new InventoryUpdate();
				if (destritem.getCount() == 0)
					iu.addRemovedItem(destritem);
				else
					iu.addModifiedItem(destritem);
				player.sendPacket(iu);
			} 
			else 
			{
				player.sendMessage("- Ошибка!");
			}
		} else if (actualCommand.equalsIgnoreCase("setCL7")) 
		{
			if (!player.isClanLeader()) 
			{
				player.sendMessage("- Вы не глава клана. Только глава клана может это сделать.");
				return;
			} 
			else if (player.getClan().getLevel() != 6)
			{
				player.sendMessage("- Не подходящий уровень клана.Можно использовать только если уровень клана 6");
				return;
			} 
			else if (player.getInventory().getInventoryItemCount(Config.Service_CL7_Item_Id, 0) < Config.Service_CL7_Item_Count) 
			{
				player.sendMessage("- У Вас не достаточное кол-во предметов для проведения операции.");
				return;
			}
			L2ItemInstance destritem = player.getInventory().destroyItemByItemId("Setclanlvl 7 for " + player.getName(),Config.Service_CL7_Item_Id,Config.Service_CL7_Item_Count, player, player);
			if (destritem != null) 
			{
				player.getClan().changeLevel(7);
				player.sendMessage("- Вы успешно повысили уровень клана!");
				InventoryUpdate iu = new InventoryUpdate();
				if (destritem.getCount() == 0)
					iu.addRemovedItem(destritem);
				else
					iu.addModifiedItem(destritem);
				player.sendPacket(iu);
			}
			else 
			{
				player.sendMessage("- Ошибка!");
			}
		} 
		else if (actualCommand.equalsIgnoreCase("setCL8")) 
		{
			if (!player.isClanLeader()) 
			{
				player.sendMessage("- Вы не глава клана. Только глава клана может это сделать.");
				return;
			} 
			else if (player.getClan().getLevel() != 7) 
			{
				player.sendMessage("- Не подходящий уровень клана.Можно использовать только если уровень клана 7");
				return;
			} 
			else if (player.getInventory().getInventoryItemCount(Config.Service_CL8_Item_Id, 0) < Config.Service_CL8_Item_Count)
			{
				player.sendMessage("- У Вас не достаточное кол-во предметов для проведения операции.");
				return;
			}
			L2ItemInstance destritem = player.getInventory().destroyItemByItemId("Setclanlvl 8 for " + player.getName(),Config.Service_CL8_Item_Id,Config.Service_CL8_Item_Count, player, player);
			if (destritem != null)
			{
				player.getClan().changeLevel(8);
				player.sendMessage("- Вы успешно повысили уровень клана!");
				InventoryUpdate iu = new InventoryUpdate();
				if (destritem.getCount() == 0)
					iu.addRemovedItem(destritem);
				else
					iu.addModifiedItem(destritem);
				player.sendPacket(iu);
			} 
			else 
			{
				player.sendMessage("- Ошибка!");
			}
		} 
		else if (actualCommand.equalsIgnoreCase("setClanRep")) 
		{
			if (player.getInventory().getInventoryItemCount(Config.Service_ClanRep_PriceID, -1) < Config.Service_ClanRep_PriceCount)
			{
				player.sendMessage("- У вас нету " + Config.Service_ClanRep_PriceCount + " " + ItemTable.getInstance().getTemplate(Config.Service_ClanRep_PriceID).getName());
				return;
			}
			if (!player.isClanLeader()) 
			{
				player.sendMessage("- Услуга доступна только лидерам клана");
				return;
			} 
			else if (!(player.getClan().getLevel() >= 5)) 
			{
				player.sendMessage("- Уровень клана не соответсвует требованиям покупки.");
				player.sendMessage("- Минимальный уровень клана для покупки К.Р. равен 5-му.");
				return;
			} 
			else 
			{
				player.destroyItemByItemId("ServiceManager",Config.Service_ClanRep_PriceID,Config.Service_ClanRep_PriceCount, player, true);
				player.getClan().setReputationScore(player.getClan().getReputationScore()+ Config.Service_ClanRep_Count, true);
				player.sendMessage("- Вашему клану начислено " + Config.Service_ClanRep_Count + " клановой репутации");
				player.sendMessage("- Сделайте ре-логин");
				MagicSkillUser MSU = new MagicSkillUser(player, player, 2024, 1, 1, 0);
				player.broadcastPacket(MSU);
			}
		} 
		else if (actualCommand.equalsIgnoreCase("setNoble")) 
		{
			if (player.getInventory().getInventoryItemCount(Config.Service_Noble_PriceID, -1) < Config.Service_Noble_PriceCount) 
			{
				player.sendMessage("- У вас нету " + Config.Service_Noble_PriceCount + " " + ItemTable.getInstance().getTemplate(Config.Service_Noble_PriceID).getName());
				return;
			} 
			else if (player.isNoble()) 
			{
				player.sendMessage("- Вы уже имеете статус Дворянина.");
				return;
			} 
			else
			{
				player.destroyItemByItemId("ServiceManager",Config.Service_Noble_PriceID,Config.Service_Noble_PriceCount, player, true);
				player.setNoble(true);
				player.addSkill(SkillTable.getInstance().getInfo(1323, 1));
				player.addSkill(SkillTable.getInstance().getInfo(325, 1));
				player.addSkill(SkillTable.getInstance().getInfo(326, 1));
				player.addSkill(SkillTable.getInstance().getInfo(327, 1));
				player.addSkill(SkillTable.getInstance().getInfo(1324, 1));
				player.addSkill(SkillTable.getInstance().getInfo(1325, 1));
				player.addSkill(SkillTable.getInstance().getInfo(1326, 1));
				player.addSkill(SkillTable.getInstance().getInfo(1327, 1));
				player.broadcastPacket(new SocialAction(player.getObjectId(),16));
				player.sendMessage("- Вы получили статус дворянина.");
				player.broadcastUserInfo();
				PcAction.giveItems(player, 7694, 1);
				
				if (Config.SERVICE_AUDIT) 
				{
					String serviceName = "";
					serviceName = "give Noble";
					String message = "";
					message = "give Nobless status";
					ServiceLog.ServiceAudit(player, serviceName, message);
				}
			}
		} 
		else if (actualCommand.equalsIgnoreCase("setName")) 
		{
			TextBuilder html3 = new TextBuilder("<html><body><title>Сервис Менеджер</title><center>");
			html3.append("<table>");
			html3.append("<br>");
			html3.append("<br>");
			html3.append("<br>");
			html3.append("<br>");
			html3.append("<br>");
			html3.append("<tr><td><edit var=\"new_name\" width=120></td></tr><br>");
			html3.append("<tr><td><button value=\"Сменить\" action=\"bypass -h npc_%objectId%_setName1 $new_name\" width=120 height=15></td></tr>");
			html3.append("</table>");
			html3.append("</center></body></html>");
			insertObjectIdAndShowChatWindow(player, html3.toString());
		} 
		else if (actualCommand.equalsIgnoreCase("setName1")) 
		{
			StringTokenizer st1 = new StringTokenizer(command);
			st1.nextToken();
			String val = st1.nextToken();
			String oldName = player.getName();
			String _Name = " ";
			if (val == null)
				_Name = oldName;
			else
				_Name = val;

			if (player.getInventory().getInventoryItemCount(Config.Service_ChangeNick_PriceID, -1) < Config.Service_ChangeNick_PriceCount) 
			{
				player.sendMessage("У вас нету " + Config.Service_Nick_Color_Count + " " + ItemTable.getInstance().getTemplate(Config.Service_Nick_Color_PriceID).getName());
				return;
			} 
			else
				PcAction.changeName(player, _Name, oldName);
		} 
		else if (actualCommand.equalsIgnoreCase("setSex")) 
		{
			if (player.getInventory().getInventoryItemCount(Config.Service_SetSex_PriceID, -1) < Config.Service_SetSex_PriceCount)
			{
				player.sendMessage("У вас нету "+ Config.Service_Nick_Color_Count + " " + ItemTable.getInstance().getTemplate(Config.Service_Nick_Color_PriceID).getName());
				return;
			} 
			else
			{
				player.destroyItemByItemId("ServiceManager",Config.Service_SetSex_PriceID,Config.Service_SetSex_PriceCount, player, true);
				player.getAppearance().setSex(player.getAppearance().getSex() ? false : true);
				player.broadcastUserInfo();
				player.decayMe();
				player.spawnMe(player.getX(), player.getY(), player.getZ());
				PcAction.storeCharSex(player, 1);
				
				if (Config.SERVICE_AUDIT) 
				{
					String serviceName = "";
					serviceName = "change Sex";
					String message = "";
					message = "change Sex";
					ServiceLog.ServiceAudit(player, serviceName, message);
				}
			}
		} 
		else if (actualCommand.equalsIgnoreCase("setNickColor")) 
		{
			TextBuilder html3 = new TextBuilder("<html><body><title>Сервис Менеджер</title><center>");
			html3.append("<br>Доступные цвета:<br>");
			for (String color : Config.Service_Nick_Color_List)
			html3.append("<br><a action=\"bypass -h npc_%objectId%_setNickColor1 ").append(color).append("\"><font color=\"").append(color.substring(4, 6) + color.substring(2, 4)+ color.substring(0, 2)).append("\">").append(color.substring(4, 6) + color.substring(2, 4)+ color.substring(0, 2)).append("</font></a>");
			html3.append("<br><a action=\"bypass -h npc_%objectId%_setNickColor1 FFFFFF\"><font color=\"FFFFFF\">Стандартный белый</font></a>");
			html3.append("</center></body></html>");
			insertObjectIdAndShowChatWindow(player, html3.toString());
		} 
		else if (actualCommand.equalsIgnoreCase("setNickColor1")) 
		{
			StringTokenizer st1 = new StringTokenizer(command);
			st1.nextToken();
			String val = st1.nextToken();
			if (player.getInventory().getInventoryItemCount(Config.Service_Nick_Color_PriceID, -1) < Config.Service_Nick_Color_Count) 
			{
				player.sendMessage("- У вас нету " + Config.Service_Nick_Color_Count + " " + ItemTable.getInstance().getTemplate(Config.Service_Nick_Color_PriceID).getName());
				return;
			} 
			else 
			{
				player.destroyItemByItemId("ServiceManager",Config.Service_Nick_Color_PriceID,Config.Service_Nick_Color_Count, player, true);

				int color = Integer.decode("0x" + val);
				player.getAppearance().setNameColor(color);
				player.broadcastUserInfo();
				long time = Long.valueOf(Config.Service_Nick_Color_Time);
				PcColorTable.getInstance().add(player, color,System.currentTimeMillis(),(time * 24 * 60 * 60 * 1000));

				if (Config.SERVICE_AUDIT) 
				{
					String serviceName = "";
					serviceName = "Change Color Nick";
					String message = "";
					message = "Change color on " + color + ".";
					ServiceLog.ServiceAudit(player, serviceName, message);
				}
			}
		} 
		else
			super.onBypassFeedback(player, command);
	}

	public final void showServicesWindow(L2PcInstance player)
	{
		TextBuilder html2 = new TextBuilder("<html><body><title>Сервис Менеджер</title><br><br><br><br><br><center>");
		if (Config.SERVICES_MANAGER)
		{
			if (Config.USE_PREMIUMSERVICE)
				html2.append("<center><a action=\"bypass -h npc_%objectId%_premadd1\">Купить ПА</a> <font color=006400> Цена: "+ Config.Service_Premium1_Item_Count + " " + ItemTable.getInstance().getTemplate(Config.Service_Premium1_Item_Id).getName() + "</font><br></center>");
			if (Config.Service_ClanLvl6)
				html2.append("<center><a action=\"bypass -h npc_%objectId%_setCL6\">Купить 6ур клана</a> <font color=006400> Цена: " + Config.Service_CL6_Item_Count + " " + ItemTable.getInstance().getTemplate(Config.Service_CL6_Item_Id).getName() + "</font><br></center>");
			if (Config.Service_ClanLvl7)
				html2.append("<center><a action=\"bypass -h npc_%objectId%_setCL7\">Купить 7ур клана</a>  <font color=006400>Цена: " + Config.Service_CL7_Item_Count + " " + ItemTable.getInstance().getTemplate(Config.Service_CL7_Item_Id).getName() + "</font><br></center>");
			if (Config.Service_ClanLvl8)
				html2.append("<center><a action=\"bypass -h npc_%objectId%_setCL8\">Купить 8ур клана</a>  <font color=006400>Цена: " + Config.Service_CL8_Item_Count + " " + ItemTable.getInstance().getTemplate(Config.Service_CL8_Item_Id).getName() + "</font><br></center>");
			if (Config.Service_ClanRep)
				html2.append("<center><a action=\"bypass -h npc_%objectId%_setClanRep\">Купить Клан репутацию</a>  <font color=006400>Цена: " + Config.Service_ClanRep_PriceCount + " " + ItemTable.getInstance().getTemplate(Config.Service_ClanRep_PriceID).getName() + "</font><br></center>");
			if (Config.Service_Noble && !player.isNoble())
				html2.append("<center><a action=\"bypass -h npc_%objectId%_setNoble\">Стать Дворянином</a>  <font color=006400>Цена: "	+ Config.Service_Noble_PriceCount + " " + ItemTable.getInstance().getTemplate(Config.Service_Noble_PriceID).getName() + "</font><br></center>");
			if (Config.Service_ChangeNick)
				html2.append("<center><a action=\"bypass -h npc_%objectId%_setName\">Сменить имя</a> <font color=006400> Цена: " + Config.Service_ChangeNick_PriceCount + " " + ItemTable.getInstance().getTemplate(Config.Service_ChangeNick_PriceID).getName() + "</font><br></center>");
			if (Config.Service_SetSex)
				html2.append("<center><a action=\"bypass -h npc_%objectId%_setSex\">Сменить пол</a>  <font color=006400>Цена: " + Config.Service_SetSex_PriceCount + " " + ItemTable.getInstance().getTemplate(Config.Service_SetSex_PriceID).getName() + "</font><br></center>");
			if (Config.Service_Nick_Color)
				html2.append("<center><a action=\"bypass -h npc_%objectId%_setNickColor\">Изменить цвет ника</a> <font color=006400>Цена: " + Config.Service_Nick_Color_Count + " " + ItemTable.getInstance().getTemplate(Config.Service_Nick_Color_PriceID).getName() + "</font><br></center>");
		} 
		else
			html2.append("Сервис Менеджер Выключен");
			html2.append("</center></body></html>");
		insertObjectIdAndShowChatWindow(player, html2.toString());
	}
}